home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 40
/
Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso
/
Aminet
/
util
/
boot
/
BlizKick.lha
/
BlizKick
/
Modules
/
SoftSCSI.ASM
< prev
next >
Wrap
Assembly Source File
|
2000-09-04
|
5KB
|
238 lines
; FILE: Source:modules/SoftSCSI.ASM REV: 20 --- Softkick SCSI ROM
;
; SoftSCSI -Module
; ~~~~~~~~~~~~~~~~
; This module will replace the SCSI (ep)rom (27C256) found from BLIZZARD
; turbo boards via software. Should work with 1230-IV, 1240-T/ERC and 1260.
;
; +--------------+------------------------
; | 1230-IV |
; | 1240-T/ERC | A1234.ROM
; | 1260 |
; +--------------+------------------------
;
; The ROM file *must* be "DEVS:Modules/A1234.ROM".
; Note that this module requires lots of rom space (~20K), so you should
; use EXTRESBUF feature of BlizKick.
;
; Beta ROM file can be obtained from phase5's ftp server ftp.phase5.de,
; directory /pub/phase5/BETA/SCSI/.
;
; This module does the same thing as SoftSCSI
; (Aminet: util/boot/SoftSCSI.lha) by Gideon Zenz.
;
; Written by Harry Sintonen.
; This source code is Public Domain.
;
incdir "include:" ; Some required...
include "exec/types.i"
include "exec/libraries.i"
include "libraries/configvars.i"
include "blizkickmodule.i"
_LVOOpenLibrary EQU -$228
_LVOCloseLibrary EQU -$19E
_LVOOpen EQU -$1E
_LVOClose EQU -$24
_LVORead EQU -$2A
_LVOFindConfigDev EQU -$48
MODE_OLDFILE EQU 1005
OFFSET_BEGINNING EQU -1
OFFSET_CURRENT EQU 0
OFFSET_END EQU 1
call MACRO
jsr (_LVO\1,a6)
ENDM
BLIZPROD EQU $2140
XROM_BUFSIZE EQU 32768
SECTION PATCH,CODE
_DUMMY_LABEL
BK_PTC
; Code is run with following incoming parameters:
;
; a0=ptr to ROM start (buffer) eg. $1DE087B8
; a1=ptr to ROM start (ROM) eg. $00F80000 (do *not* access!)
; d0=ROM lenght in bytes eg. $00080000
; a2=ptr to _FindResident routine (will search ROM buffer for resident tag):
; CALL: jsr (a2)
; IN: a0=ptr to ROM, d0=rom len, a1=ptr to resident name
; OUT: d0=ptr to resident (buf) or NULL
; a3=ptr to _InstallModule routine (can be used to plant a "module"):
; CALL: jsr (a3)
; IN: a0=ptr to ROM, d0=rom len, a1=ptr to module, d6=dosbase
; OUT: d0=success
; a4=ptr to _Printf routine (will dump some silly things (errormsg?) to stdout ;-)
; CALL: jsr (a4)
; IN: a0=FmtString, a1=Array (may be 0), d6=dosbase
; OUT: -
; d6=dosbase, a6=execbase
;
; Code should return:
;
; d0=true if succeeded, false if failed.
; d1-d7/a0-a6 can be trashed. a7 *must* be preserved! ;-)
; NOTE: Kickstart *is* 2.0+
cmp.w #37,($C,a0) ; Requires KS ROM V2.04+
bhs.b .go
moveq #0,d0
rts
.go movem.l d0/a0-a1,-(sp)
moveq #0,d7
lea (_sscsi_name,pc),a1 ; _FindResident
jsr (a2)
tst.l d0
bne .xit ; Already installed!
lea (_ExpName,pc),a1
moveq #37,d0
call OpenLibrary
move.l d0,d5
beq .xit
sub.l a0,a0 ; BUG: was missing!
move.l #BLIZPROD,d0 ; Requires 1230-IV, 1240 or 1260!
moveq #$11,d1
exg d5,a6
call FindConfigDev
exg d5,a6
move.l d0,d2
move.l d5,a1
call CloseLibrary
tst.l d2
beq .berr ; Need board!
exg d6,a6
lea (_1200name,pc),a0
move.l a0,d1
move.l #MODE_OLDFILE,d2
call Open
move.l d0,d5
beq.b .exitd ; No file!
lea (_ROMImage,pc),a5
move.l d5,d1
move.l a5,d2
moveq #4,d3
call Read
cmp.l d0,d3
bne.b .readerr ; bad romfile!
cmp.l #'XROM',(a5)
bne.b .readerr ; bad romfile!
move.l d5,d1
move.l #XROM_BUFSIZE,d3 ; Read it!
call Read
tst.l d0
bmi.b .readerr ; bad romfile!
add.l d0,_softscsi_module+bkm_ResTag+RT_ENDSKIP ; magic... :)
movem.l (sp),d0/a0
lea (_softscsi_module,pc),a1
exg d6,a6 ; d6=dosbase !!
jsr (a3) ; _InstallModule
exg d6,a6
tst.l d0
beq.b .installerr ; Failed!
moveq #1,d7 ; All ok!
.readerr move.l d5,d1
call Close
.exitd exg d6,a6
.exit move.l d7,d0 ; Valid counter?
bne.b .xit
lea (_error1,pc),a0 ; a0=fmt
.fail pea (_1200name,pc)
pea (_header,pc)
move.l sp,a1 ; a1=array
jsr (a4) ; Call _Printf
addq.l #8,sp
moveq #0,d0 ; Return fail
.xit lea (3*4,sp),sp
rts
.berr lea (_error2,pc),a0
bra.b .fail
.installerr move.l d5,d1
call Close
exg d6,a6
lea (_error3,pc),a0 ; a0=fmt
bra.b .fail
_1200name dc.b 'DEVS:Modules/A1234.ROM',0
_header dc.b 'SoftSCSI: ',0
_error1 dc.b '%sCouldn''t load "%s"!',10,0
_error2 dc.b '%sRequires BLIZZARD 1230-IV, 1240-T/ERC or 1260 turbo board.',10,0
_error3 dc.b '%sCouldn''t plant module! (increase EXTRESBUF)',10,0
CNOP 0,4
_softscsi_module
BK_MOD BKMF_SingleMode,_patch_end,(RTF_COLDSTART)<<24!37<<16!NT_UNKNOWN<<8!104,_sscsi_name,_sscsi_name,.SoftSCSI
; IN: d0=0, a0=0?, a6=execbase
.SoftSCSI movem.l d0-a6,-(sp)
lea (_ExpName,pc),a1
moveq #37,d0
call OpenLibrary
move.l d0,d6
beq.b .exit
sub.l a0,a0
move.l #$2140,d0
moveq #$11,d1
exg d6,a6
call FindConfigDev
exg d6,a6
tst.l d0
beq.b .close
move.l d0,a0
move.l (cd_Rom+er_Reserved0c,a0),a0 ; a0=DiagArea
lea (14,a0),a1
move.l (26,a1),a0
move.l (30,a1),a3
lea (34,a1),a4 ; a6=execbase
movem.l d6/a6,-(sp)
bsr.b _Code
movem.l (sp)+,d6/a6
.close move.l d6,a1
call CloseLibrary
.exit movem.l (sp)+,d0-a6
rts
_ExpName dc.b 'expansion.library',0
_sscsi_name dc.b 'SoftSCSI',0
CNOP 0,8
_ROMImage
_Code
_patch_end ; MUST be here!
ds.b XROM_BUFSIZE
SECTION VERSION,DATA
dc.b '$VER: SoftSCSI_MODULE 1.2 (10.3.97)',0